package com.kingyun.gpsinspection.purificationservice.dao.mapper.jsm;

import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.Device;
import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.DeviceVo;
import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.ManageWorkOrderVo;
import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.Organization;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @version V1.0
 * @Package com.cqhilink.iot.jobstandardmanagement.dao.mapper
 * @Description: ${TODO}(生产设备持久层接口)
 * @author: YuPeng
 * @date: 2016/12/2,16:15
 */
public interface DeviceMapper {
    /**
     * 以下是设备持久化方法
     */
    int insert(Device device);

    /**
     * 更新设备
     * @param device
     * @return
     */
    int update(Device device);

    /**
     * 更新设备状态
     * @param status
     * @param deviceId
     * @return
     */
    int updateStatusByDeviceId(int status, String deviceId);

    /**
     * 批量更新设备状态
     * @param map
     * @return
     */
    int updateStatusByDeviceIds(Map<String, Object> map);

    /**
     * 获取设备列表
     * @param device
     * @return
     */
    List<DeviceVo> selectByDevice(Device device);

    /**
     * 模糊查询设备列表
     * @param DeviceVo
     * @return
     */
    List<DeviceVo> selectByDim(DeviceVo DeviceVo);

    /**
     * 获取模糊查询设备的数量
     * @param DeviceVo
     * @return
     */
    int selectCountByDim(DeviceVo DeviceVo);

    /**
     * 获取设备信息
     * @param deviceId
     * @return
     */
    DeviceVo selectByDeviceId(String deviceId);

    /**
     * 获取机构下设备数量
     * @param orgId
     * @return
     */
    int selectCountByPOId(String orgId);

    /**
     * 获取实体类型ID下设备数量
     * @param enId
     * @return
     */
    int selectCountByPEId(String enId);

    /**
     * 按组织机构ID查询设备列表
     * @param orgId
     * @return
     */
    List<DeviceVo> selectByPOId(String orgId);

    /**
     * 获取查询结果数量
     * @param device
     * @return
     */
   Integer selectCountByDevice(Device device);

    /**
     * 批量修改设备
     * @param map
     * @return
     */
    int updateSycnDevice(Map<String, Object> map);


    /**
     *判断子孩子的数量
     * @param deviceId
     * @return
     */
    Integer selectCountByPid(String deviceId);


    /**
     * 得到某个父级的子设备
     * @param deviceId
     * @return
     */
    List<DeviceVo> selectByPEId(String deviceId);

    /**
     * 获取当前设备
     * @param DeviceVo
     * @return 返回当前组织下所有的设备
     */
    List<DeviceVo> selectDeviceListByOrgId(DeviceVo DeviceVo);


    /**
     * 更新设备运行状态
     * @param deviceId
     * @param state
     * @param modifyTime
     * @return
     */
    int updateDeviceState(@Param("deviceId") String deviceId, @Param("state") Integer state, @Param("modifyTime") String modifyTime);





    /**
     * 得到设备对应的工单
     * @param manageWorkOrderVo
     * @return
     */
    List<ManageWorkOrderVo> getWorkOrderByDeviceId(ManageWorkOrderVo manageWorkOrderVo);


    /**
     * 得到设备对应工单的数量
     * @param manageWorkOrderVo
     * @return
     */
    int getWorkOrderByDeviceIdCount(ManageWorkOrderVo manageWorkOrderVo);


    /**
     * @param  map
     * @return
     */
    List<DeviceVo> queryDeviceVoByOrgsKeyword(Map map);

    /**
     * 查询对应组织下包含特性的设备
     * @param list
     * @return
     */
    List<DeviceVo> queryDevicePropertyByOrgs(List<Organization> list);

}
